package jmine.tec.services.api.export;

/**
 * Interface a ser implementada por um objeto que armazena as referências geradas durante a exportação, além de gerar referências únicas.
 * Este objeto é utilizado durante uma exportação e não pode ser reutilizado.<br/>
 * Cada objeto possui apenas uma referencia. Referencias não podem ser sobrescritas.<br/>
 * Para evitar que seja guardada referência para um proxy e depois seja buscada uma referencia para a implementação 'raiz', ou as situação
 * inversa, a implementação deve sempre efetuar o narrow das entidades persistíveis lazy.
 * 
 * @author lundberg
 */
public interface ReferenceMap {

    /**
     * Retorna true caso já exista uma referencia para o dado objeto, false caso contrário.
     * 
     * @param entity entity
     * @return boolean
     */
    boolean containsReference(Object entity);

    /**
     * Cria uma referência única com o prefixo dado.
     * 
     * @param entity entity
     * @param referencePrefix referencePrefix
     * @return referencia criada.
     */
    String addReference(Object entity, String referencePrefix);

    /**
     * Retorna a string de referência à entidade dada.
     * 
     * @param entity entity
     * @return referencia
     */
    String getReference(Object entity);
}
